home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d20 / gus_140.arc / GUS_WCFG.PAS next >
Pascal/Delphi Source File  |  1991-06-30  |  4KB  |  114 lines

  1. {$A+,B-,D-,E-,F-,I+,L-,N-,O-,R+,S+,V-}
  2. {$IFDEF VER60}
  3.   {$G-,X-}
  4. {$ENDIF}
  5. {$M 1024,0,0}
  6.  
  7. program GUS_WriteConfig;    { Append or update configuration }
  8.                             { information to or in GUS.EXE   }
  9. uses DOS;
  10.  
  11. type
  12.     FNameStr = string[12];
  13.  
  14.     ArcType = (Unknown,ARC,ARJ,ARp,DWC,HYP,LZH,PAK,ZIP,ZOO);
  15.     ArcCmds = (Extract,Replace,Display,Test);
  16.  
  17.     ArcData = record
  18.                Ext : string[3];
  19.                Prog: FNameStr;
  20.                Cmd : array [ArcCmds] of string[10];
  21.                Pwd : string[5];
  22.               end;
  23.  
  24.     ArcCfg  = record
  25.                 Marker  : longint;
  26.                 ArcTable: array [ArcType] of ArcData;
  27.               end;
  28.  
  29. const
  30.     GUSname     = 'GUS.EXE';
  31.     CfgMarker   = $775A6F4A;  {'JoZw'}
  32.     Unsupported = '**********';
  33.     ArcInfo     : ArcCfg
  34.     = (Marker   : CfgMarker;
  35.        ArcTable :                         {     Extract      Replace      Display Test }
  36.        ((Ext: '???'; Prog: ''            ; Cmd:(''         , ''         , ''          , ''          ); Pwd: ''          ),
  37.         (Ext: 'ARC'; Prog: 'PKUNPAK .EXE'; Cmd:('-n       ', '-r       ', '-c        ', '-t        '); Pwd: '-g   '     ),
  38.         (Ext: 'ARJ'; Prog: 'ARJ     .EXE'; Cmd:('e -n     ', 'e -y     ', 'p         ', 't         '); Pwd: '-g   '     ),
  39.         (Ext: 'A7+'; Prog: 'XARC    .EXE'; Cmd:('         ', '/o       ', Unsupported , Unsupported ); Pwd: '/g   '     ),
  40.         (Ext: 'DWC'; Prog: 'DWC     .EXE'; Cmd:('xowr     ', 'xwr      ', 'p         ', 't         '); Pwd: 'g    '     ),
  41.         (Ext: 'HYP'; Prog: 'HYPER   .EXE'; Cmd:('-xp      ', '-xop     ', Unsupported , Unsupported ); Pwd: Unsupported ),
  42.         (Ext: 'LZH'; Prog: 'LHA     .EXE'; Cmd:('e /x+m+  ', 'e /x+m+c+', 'p         ', 't         '); Pwd: Unsupported ),
  43.         (Ext: 'PAK'; Prog: 'PAK     .EXE'; Cmd:('e/WN/PATH', 'e/WA/PATH', 'p         ', 't         '); Pwd: '/g   '     ),
  44.         (Ext: 'ZIP'; Prog: 'PKUNZIP .EXE'; Cmd:('-n -d    ', '-o -d    ', '-c        ', '-t        '); Pwd: '-s   '     ),
  45.         (Ext: 'ZOO'; Prog: 'ZOO     .EXE'; Cmd:('e//      ', 'e//SO    ', 'ep        ', 'eN        '); Pwd: Unsupported )
  46.        )
  47.       );
  48.  
  49. var
  50.     CfgData : ArcCfg;
  51.     Present : boolean;
  52.     GUSfile : file;
  53.  
  54.  
  55. procedure ReadData (var F   : file;
  56.                     var Data: ArcCfg);
  57.  begin
  58.   {$I-}
  59.   reset(F,1);
  60.   {$I+}
  61.   if IOresult<>0
  62.    then begin
  63.          writeln('Can''t find ',GUSname);
  64.          Halt(1);
  65.         end;
  66.   {$I-} seek(F,filesize(F)-sizeof(ArcCfg)); {$I+}
  67.   if IOresult<>0
  68.    then begin
  69.          writeln('Problem: cannot seek to byte location ',filesize(F),' - ',sizeof(ArcCfg));
  70.          Halt(1);
  71.         end;
  72.   {$I-} BlockRead(F,Data,sizeof(ArcCfg)); {$I+}
  73.   if IOresult<>0
  74.    then begin
  75.          writeln('Problem: cannot read ',sizeof(ArcCfg),' bytes in ',GUSname,' at offset ',filepos(F));
  76.          Halt(1);
  77.         end;
  78.   close(F);
  79.   writeln('Reading configuration information from ',GUSname)
  80.  end; {ReadData}
  81.  
  82.  
  83. procedure AppendData (var F   : file;
  84.                       var Data: ArcCfg);
  85.  begin
  86.   Data.Marker:=CfgMarker;
  87.   reset(F,1);
  88.   seek(F,filesize(F));
  89.   BlockWrite(F,Data,sizeof(ArcCfg));
  90.   close(F);
  91.   writeln('Appending configuration information to ',GUSname)
  92.  end; {AppendData}
  93.  
  94.  
  95. procedure UpdateData (var F   : file;
  96.                       var Data: ArcCfg);
  97.  begin
  98.   Data.Marker:=CfgMarker;
  99.   reset(F,1);
  100.   seek(F,filesize(F)-sizeof(ArcCfg));
  101.   BlockWrite(F,Data,sizeof(ArcCfg));
  102.   close(F);
  103.   writeln('Updating configuration information in ',GUSname)
  104.  end; {UpdateData}
  105.  
  106. begin {=MAIN=}
  107.  assign(GUSfile,GUSname);
  108.  ReadData(GUSfile,CfgData);
  109.  Present:=(CfgData.Marker=CfgMarker);
  110.  if Present
  111.   then UpdateData(GUSfile,ArcInfo)
  112.   else AppendData(GUSfile,ArcInfo)
  113. end.
  114.